@startuml
title Схема доступа компонентов скриптов к внутреннему содержимому веб-страницы

  node "Browser" as BROWSER_NODE {
    folder "Active Tab" {
      component [content_script.js] as content_script
      frame "Web App" {
        component [inject_script.js] as inject_script
        component [webapp_script.js] as webapp_script
        frame "Environment" {
          component #FFAA99 [window] as window
          component #FFAA99 [document] as document
        }
      }
    }
  }

  webapp_script<-[#DD00DD]-> window
  webapp_script<-[#DD00DD]-> document

  inject_script <-[#991530]-> window
  inject_script <-[#991530]-> document

  content_script <-[#345ACF]-> window
  content_script <-[#345ACF]-> document
  content_script <.[#345ACF].> inject_script

  note right of [webapp_script]
    Условное обозначение скриптов
    веб-приложения
  end note
  note left of [content_script]
    Content Script имеет
    ограниченный доступ к
    странице, может взаимодействовать
    с объектами window и document,
    но не имеет доступа к объектам
    и переменым, созданным в
    веб-приложении
  end note
  note left of [inject_script]
    Content Script имеет доступ к
    inject_script.js как к HTML
    объекту <script> на странице
    (отмечено пунктиром)
  end note

@enduml